\documentclass[a4paper, 12pt]{article}
\usepackage[UTF8]{ctex}
\usepackage{color}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{float}

\setlength{\parindent}{0pt}

\begin{document}
  \title{Shell实验报告}
  \author{郑淑辉}
  \date{\today}
  \maketitle

  \pagenumbering{roman}
  \tableofcontents
  \newpage
  \pagenumbering{arabic}

  \section{编写两个bash函数}
  \paragraph{编写两个 bash 函数 marco 和 polo 执行下面的操作。 每当你执行 marco 时，当前的工作目录应当以某种形式保存，当执行 polo 时，无论现在处在什么目录下，都应当 cd 回到当时执行 marco 的目录。 为了方便 debug，
  你可以把代码写在单独的文件 marco.sh 中，并通过 source marco.sh 命令，（重新）加载函数。}
  \paragraph{marco 函数：\\echo "\$(pwd)" > \$HOME/marco\_history.log\\
  echo "save pwd \$(pwd)"\\这段代码的作用是将当前工作目录的路径保存到名为marco\_history.log的文件中,并在终端输出"save pwd"和当前工作目录的路径。}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{3}
    \caption{实例1图片}
  \end{figure}

  \section{阅读man ls,然后使用ls命令进行如下操作}
  \paragraph{所有文件（包括隐藏文件）\\
  文件打印以人类可以理解的格式输出 (例如，使用 454M 而不是 454279954)\\
  文件以最近访问顺序排序\\
  以彩色文本显示输出结果}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{2}
    \includegraphics[width=1\textwidth]{02}
    \caption{实例2图片}
  \end{figure}

  \section{编写一段 bash 脚本，运行如下的脚本直到它出错}
  \paragraph{假设您有一个命令，它很少出错。因此为了在出错时能够对其进行调试，需要花费大量的时间重现错误并捕获输出。 编写一段 bash 脚本，运行如下的脚本直到它出错，
  将它的标准输出和标准错误流记录到文件，并在最后输出所有内容。 加分项：报告脚本在失败前共运行了多少次。}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{4}
    \includegraphics[width=1\textwidth]{04}
    \caption{实例3图片}
  \end{figure}

  \section{递归地查找文件夹中所有的 HML 文件}
  \paragraph{find 命令中的 -exec 参数非常强大，它可以对我们查找的文件进行操作。但是，如果我们要对所有文件进行操作呢？例如创建一个 zip 压缩文件？我们已经知道，命令行可以从参数或标准输入接受输入。在用管道连接命令时，我们将标准输出和标准输入连接起来，
  但是有些命令，例如 tar 则需要从参数接受输入。这里我们可以使用 xargs 命令，它可以使用标准输入中的内容作为参数。 例如 ls | xargs rm 会删除当前目录中的所有文件。
  您的任务是编写一个命令，它可以递归地查找文件夹中所有的 HML 文件，并将它们压缩成 zip 文件。注意，即使文件名中包含空格，您的命令也应该能够正确执行（提示：查看 xargs 的参数 -d，译注：MacOS 上的 xargs 没有 -d，查看这个 issue）}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{05}
    \includegraphics[width=1\textwidth]{5}
    \caption{实例4图片}
  \end{figure}
  \paragraph{find . -type f -name "*.Hml"：在当前目录(.)及其子目录中查找所有类型为文件(-type f)且名称匹配通配符 *.Hml 的文件。
  xargs -d '\textbackslash n'：将 find 命令的输出作为参数传递给 tar 命令。-d '\textbackslash n' 表示使用换行符作为分隔符。
  tar -cvzf Hml.zip:创建一个名为 Hml.zip 的压缩文件，其中包含从 find 命令找到的所有 .Hml 文件。-c 表示创建新的归档文件，
  -v 表示详细输出，-z 表示使用 gzip 压缩，-f 表示指定归档文件名。}

  \section{猜数字游戏1-100}
  \paragraph{编写一个 bash 脚本，随机生成一个 1-100 之间的数字，提示用户猜测，如果猜测正确，则输出“恭喜你猜对了！”，如果猜测错误，则输出“很遗憾，你猜错了！”}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{6}
    \includegraphics[width=1\textwidth]{06}
    \caption{实例5图片}
  \end{figure}

  \section{批量修改后缀名}
  \paragraph{假设我们有一个文件夹，里面有很多文件，我们想把它们的后缀名都改成 .txt。我们可以使用如下命令:for i in `ls *.1`用于遍历当前目录下所有扩展名为1的文件,mv用于重命名文件}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{7}
    \includegraphics[width=1\textwidth]{07}
    \caption{实例6图片}
  \end{figure}

  \section{查看CPU厂商信息}
  \paragraph{编写一个 bash 脚本，输出当前 CPU 架构的厂商信息。}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{8}
    \includegraphics[width=1\textwidth]{08}
    \caption{实例7图片}
  \end{figure}

  \section{chmod命令}
  \paragraph{chmod命令用于修改文件或目录的权限}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{9}
    \caption{实例8图片}
  \end{figure}

  \section{新建文件}
  \paragraph{在 /tmp 下新建一个名为 missing 的文件夹用 touch 在 missing 文件夹中新建一个叫 semester 的文件}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{1}
    \caption{实例9图片}
  \end{figure}

  \section{Linux的基本命令}
  \begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{10}
    \includegraphics[width=1\textwidth]{010}
    \caption{实例10图片}
  \end{figure}
  
  \paragraph{gitee地址 Htps://gitee.com/zsh13752/gitcode}

\end{document}